/**
 * @file 响应转换拦截器
 * @description 统一处理控制器响应格式
 * @author AI Assistant
 * @date 2024-02-26
 */

import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { ApiResponse } from '../../modules/common/dto/api-response.dto';

@Injectable()
export class TransformInterceptor<T> implements NestInterceptor<T, ApiResponse<T>> {
  /**
   * 拦截方法
   * @param context 执行上下文
   * @param next 调用处理器
   * @returns 包装后的响应流
   */
  intercept(context: ExecutionContext, next: CallHandler): Observable<ApiResponse<T>> {
    return next.handle().pipe(
      map(data => {
        // 如果控制器已经返回了ApiResponse格式，则不再包装
        if (data instanceof ApiResponse) {
          return data;
        }
        
        // 包装普通响应
        return ApiResponse.success(data);
      }),
    );
  }
} 